Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

compliance: certification program #590

Closed
wants to merge 3 commits into from

Conversation

SecKatie
Copy link
Contributor

  • adds spec/v1.0/certification.md to document the process and tiers that define trust
  • adds spec/v1.0/certification-registry.md to hold self-certifications
  • adds _data/spec_v1-0/certification-registry.yml to hold a machine readable format for builder self-certifications

Addresses #515

- adds `spec/v1.0/certification.md` to document the process and tiers that
  define trust
- adds `spec/v1.0/certification-registry.md` to hold self-certifications
- adds `_data/spec_v1-0/certification-registry.yml` to hold a
  machine readable format for builder self-certifications
@netlify
Copy link

netlify bot commented Jan 26, 2023

Deploy Preview for slsa ready!

Name Link
🔨 Latest commit 960770d
🔍 Latest deploy log https://app.netlify.com/sites/slsa/deploys/63dd33cfb9c8fd0009c4cd47
😎 Deploy Preview https://deploy-preview-590--slsa.netlify.app/spec/v1.0/certification
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site settings.

@SecKatie SecKatie marked this pull request as draft January 26, 2023 21:38
@SecKatie SecKatie changed the title Draft: compliance: certification and self-certification registry compliance: certification and self-certification registry Jan 26, 2023
docs/_data/spec_v1-0/certification-registry.yml Outdated Show resolved Hide resolved
docs/_data/spec_v1-0/certification-registry.yml Outdated Show resolved Hide resolved
docs/_data/spec_v1-0/certification-registry.yml Outdated Show resolved Hide resolved
**[TODO] provide link to questionnaire**
2. The build system owner attests to the accuracy of the questionnaire responses
and publishes it on their website.
3. The build system owner publishes their public key to a public key server.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the key should be stored in a versioning system?

Copy link
Collaborator

@abacchi abacchi Jan 30, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make any sense for the SLSA.dev website to accept these attestations and keys in this repository for storage + reference? (Maybe instruct the build system owner to include it in the PR mentioned below in step 4?)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should ask. Will the collection of metadata require versioning? Will main be the ground truth or will folks cut release every X months to release? (have to be careful how this plays with revocation)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you think of the ideas stated here around keys: #590 (comment) #590 (comment)

Do you think that either of these options would help to satisfy the need for immutable data but also revocation? I hate the idea of a build system owner having to come to our repo and update the version of their key if it get's revoked or expires. It seems like it is a process that is highly vulnerable to human error.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PKI is definitely better since it pushes the problem to a CA instead of us. One thing to think about, though, is verification. PKI was built for "online" verification, where the client wants to verify that the cert is valid at the time of the connection.
Provenance verification happens "offline", ie a client wants to verify that the provenance was signed at a time where the certificate (and the builder attestation) was valid. This requires to have a log of "time of a signature" like Rekor provides. If you want to support key rotation, you need this feature or a client would always reject provenance signed with a certificate that is expired at verification time.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I must admit that I don't understand certificate transparency all that well. It would help prove a certificate hadn't expired at the time of signature but not whether the certificate had been revoked, right? IIUC, Sigstore uses very short-lived certificates by design, so revocation isn't part of the design, so even if we require CT for the build system PKI we need a way of handling revocation. Is that right? Or could we just punt revocation to the CAs in the case where builders don't use Sigstore?

Copy link
Contributor

@laurentsimon laurentsimon Feb 2, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CT in general just stores certs, not time of signatures: this works fine for web PKI / TLS (including key rotation), because verification happens "online". Rekor does store time of signatures, which enables "offline" revocation + key rotation (ephemeral keys are just short-lived rotated keys).

You're correct that Sigstore does not support revocation today, I think there are efforts to build some mechanism "on top" of Sigstore.

@SecKatie SecKatie mentioned this pull request Jan 30, 2023
6 tasks

- [ ] Add a link to the SLSA Self-Certification Questionnaire.

This page lists build systems that have certified conformance to the
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you mentioned we should replace the word conformance with compliance in the spec meeting today

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Although the two terms conformance and compliance are often used interchangeably the right term to use is conformance (along with conformant).
I suggest use this consistently throughout our documentation.

https://wikidiff.com/conformant/compliant for instance states that:
the difference between compliant and conformant is that compliant is willing to comply; [...] while conformant is in accordance with a set of specifications.

@lehors
Copy link
Member

lehors commented Jan 31, 2023

I don't think the registry should be stored along with the specification. Running a certification program requires quite a bit of infrastructure and people dedicated to the task. I don't think it is practical to have PRs related to registry updates mixed in with specification work.

We ought to have a separate repo for the certification program that holds the registry, with its own set of maintainers, against which PRs related to applications can be submitted.

This means that certification entries ought to specify which version of SLSA it relates to, in addition to the specific version of the product/offering.

docs/_data/spec_v1-0/certification-registry.yml Outdated Show resolved Hide resolved
docs/_data/spec_v1-0/certification-registry.yml Outdated Show resolved Hide resolved
docs/spec/v1.0/certification-registry.md Outdated Show resolved Hide resolved
We should remove the registry in preperation to move it to a dedicated
repository.
@SecKatie SecKatie changed the title compliance: certification and self-certification registry compliance: certification program Feb 1, 2023
docs/spec/v1.0/certification.md Outdated Show resolved Hide resolved
**[TODO] provide link to questionnaire**
2. The build system owner attests to the accuracy of the questionnaire responses
and publishes it on their website.
3. The build system owner publishes their public key to a public key server.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should have a way to support build systems that use multiple keys.

Two ideas come to mind: either supporting multiple public keys per certification or switching to x509 certs and treating all certs that chains up to the one in the registry as being from the same builder. I suspect the x509 option is over engineered for the moment, but it makes it easier for build systems to add new worker nodes without reusing keys. WYDT?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think using x509 certs is the cleanest option (from a user perspective) but it is definitely more difficult from an implementation perspective.

I would love to be able to point to a "root CA" for lack of a better term that each build service owner maintains.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, that's exactly the model I had in mind. Each build service (or maybe build service type if an owner operates more than one) is the root CA, and they mint certs for each worker they spin up. The problem is that it feels unreasonable to ask a build system operator also to run a CA, or at least it limits the PKI option to organizations of a certain size. That's why we should also have a keyless option with Sigstore.

2. The build system owner attests to the accuracy of the questionnaire responses
and publishes it on their website.
3. The build system owner publishes their public key to a public key server.
4. The build system owner submits a pull request to add their build system to
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The registry should also support keyless provenance signing with Sigstore. I think the OIDC issuer + Subject Alternate Name should be enough to identify a builder.

Copy link
Contributor Author

@SecKatie SecKatie Feb 2, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

^ that is a great idea! Do you think that this would scale better than the x509 idea?

Should we standardize on one or offer both as options?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sigstore is a CA (Fulcio) using x509 certs for users. It's basically an "instantiation" of the idea

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should support both Sigstore and more conventional PKI. Sigstore is easier to use, but I don't like the idea of forcing SLSA builders to use Sigstore.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that's a fair point- maybe its to the extent that we recommend Sigstore and show how to do the steps- but also allow/support other options as well.

@SecKatie SecKatie marked this pull request as ready for review February 6, 2023 19:43
@MarkLodato
Copy link
Member

Given the age of this PR, it appears that this effort has stalled. I'm closing this PR to keep the list of open PRs clean. If this gets picked up, we can reopen or create a new PR.

@MarkLodato MarkLodato closed this Nov 13, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

7 participants